home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 099 (1989-05-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 099 (1989-05-15)(Ossowski, Stefan)(DE)(PD).adf / PCQ / Source / Initialize.p < prev    next >
Text File  |  1989-03-31  |  6KB  |  250 lines

  1. external;
  2.  
  3. {
  4.     Initialize.p (of PCQ Pascal)
  5.     Copyright (c) 1989 Patrick Quaid.
  6.  
  7.     This routine initializes all the global variables and
  8. enters the standard identifiers.
  9. }
  10.  
  11. const
  12. {$I "pasconst.i"}
  13.  
  14. type
  15. {$I "pastype.i"}
  16.  
  17. var
  18. {$I "pasvar.i"}
  19.  
  20.     function addtype(a, b, c, d, e, f : integer): integer;
  21.         forward;
  22.     procedure enterspell(s : string);
  23.         forward;
  24.     function enterstandard(a, b, c, d, e, f, g : integer): integer;
  25.         forward;
  26.     function AllocString(l : integer): string;
  27.         forward;
  28.     
  29. procedure initstandard;
  30.  
  31. {
  32.     This is a huge routine, but since it's so straightforward I
  33. don't think I'll split it up.  It just enters all the standard
  34. identifiers into the identifier table.  Note that 'nil' is
  35. considered a standard identifier.
  36. }
  37.  
  38. var
  39.     dummy : integer;
  40.     niltype : integer;
  41.     spellint : integer;
  42. begin
  43.  
  44.     spellint := integer(adr(spelling)) - 1;
  45.  
  46.     badtype := addtype(vordinal, 0, 0, 0, 4, 0);
  47.     idents[badtype].name := string(spellint + spellptr);
  48.     enterspell(" ");
  49.  
  50.     inttype := addtype(vordinal, 0, 0, 0, 4, 0);
  51.     idents[inttype].name := string(spellint + spellptr);
  52.     enterspell("Integer");
  53.  
  54.     shorttype := addtype(vordinal, 0, 0, 0, 2, 0);
  55.     idents[shorttype].name := string(spellint + spellptr);
  56.     enterspell("Short");
  57.  
  58.     booltype := addtype(vordinal, 0, 0, 0, 1, 0);
  59.     idents[booltype].name := string(spellint + spellptr);
  60.     enterspell("Boolean");
  61.  
  62.     chartype := addtype(vordinal, 0, 0, 0, 1, 0);
  63.     idents[chartype].name := string(spellint + spellptr);
  64.     enterspell("Char");
  65.  
  66.     texttype := addtype(vfile, chartype, 0, 0, 18, 0);
  67.     idents[texttype].name := string(spellint + spellptr);
  68.     enterspell("Text");
  69.  
  70.     stringtype := addtype(vpointer, chartype, 0, 0, 4, 0);
  71.     idents[stringtype].name := string(spellint + spellptr);
  72.     enterspell("String");
  73.  
  74.     realtype := addtype(vreal, 0, 0, 0, 4, 0);
  75.     idents[realtype].name := string(spellint + spellptr);
  76.     enterspell("Real");
  77.  
  78.     bytetype := addtype(vordinal, 0, 0, 0, 1, 0);
  79.     idents[bytetype].name := string(spellint + spellptr);
  80.     enterspell("Byte");
  81.  
  82.     literaltype := addtype(varray, chartype, 1, 1, 1, inttype);
  83.  
  84.     dummy := enterstandard(stanproc, 1, 0, 0, 0, 0, 0);
  85.     enterspell("Write");
  86.  
  87.     dummy := enterstandard(stanproc, 2, 0, 0, 0, 0, 0);
  88.     enterspell("Writeln");
  89.  
  90.     dummy := enterstandard(stanproc, 3, 0, 0, 0, 0, 0);
  91.     enterspell("Read");
  92.  
  93.     dummy := enterstandard(stanproc, 4, 0, 0, 0, 0, 0);
  94.     enterspell("Readln");
  95.  
  96.     dummy := enterstandard(stanproc, 5, 0, 0, 0, 0, 0);
  97.     enterspell("New");
  98.  
  99.     dummy := enterstandard(stanproc, 6, 0, 0, 0, 0, 0);
  100.     enterspell("Dispose");
  101.  
  102.     dummy := enterstandard(stanproc, 7, 0, 0, 0, 0, 0);
  103.     enterspell("Close");
  104.  
  105.     dummy := enterstandard(stanproc, 8, 0, 0, 0, 0, 0);
  106.     enterspell("Get");
  107.  
  108.     dummy := enterstandard(stanproc, 9, 0, 0, 0, 0, 0);
  109.     enterspell("Exit");
  110.  
  111.     dummy := enterstandard(stanproc, 10, 0, 0, 0, 0, 0);
  112.     enterspell("Trap");
  113.  
  114.     dummy := enterstandard(stanfunc, 1, inttype, 0, 0, 0, 0);
  115.     enterspell("Ord");
  116.  
  117.     dummy := enterstandard(stanfunc, 2, chartype, 0, 0, 0, 0);
  118.     enterspell("Chr");
  119.  
  120.     dummy := enterstandard(stanfunc, 3, booltype, 0, 0, 0, 0);
  121.     enterspell("Odd");
  122.  
  123.     dummy := enterstandard(stanfunc, 4, inttype, 0, 0, 0, 0);
  124.     enterspell("Abs");
  125.  
  126.     dummy := enterstandard(stanfunc, 5, inttype, 0, 0, 0, 0);
  127.     enterspell("Succ");
  128.  
  129.     dummy := enterstandard(stanfunc, 6, inttype, 0, 0, 0, 0);
  130.     enterspell("Pred");
  131.  
  132.     dummy := enterstandard(stanfunc, 7, booltype, 0, 0, 0, 0);
  133.     enterspell("Reopen");
  134.  
  135.     dummy := enterstandard(stanfunc, 8, booltype, 0, 0, 0, 0);
  136.     enterspell("Open");
  137.  
  138.     dummy := enterstandard(stanfunc, 9, booltype, 0, 0, 0, 0);
  139.     enterspell("Eof");
  140.  
  141.  
  142.     dummy := enterstandard(constant, -1, booltype, 0, 0, 0, 0);
  143.     enterspell("True");
  144.  
  145.     dummy := enterstandard(constant, 0, booltype, 0, 0, 0, 0);
  146.     enterspell("False");
  147.  
  148.     dummy := enterstandard(constant, $7FFFFFFF, inttype, 0, 0, 0, 0);
  149.     enterspell("MaxInt");
  150.  
  151.     dummy := enterstandard(constant, $7FFF, shorttype, 0, 0, 0, 0);
  152.     enterspell("MaxShort");
  153.  
  154.     niltype := addtype(vpointer, badtype, 0, 0, 4, 0);
  155.     idents[niltype].name := string(spellint + spellptr);
  156.     enterspell("Address");
  157.  
  158.     dummy := enterstandard(constant, 0, niltype, 0, 0, 0, 0);
  159.     enterspell("Nil");
  160.  
  161.     dummy := enterstandard(stanfunc, 10, niltype, 0, 0, 0, 0);
  162.     enterspell("Adr");
  163.  
  164.     dummy := addtype(varray, chartype, 128, 1, 128, inttype);
  165.     dummy := enterstandard(global, 0, dummy, 0, 0, 0, 0);
  166.     enterspell("CommandLine");
  167. end;
  168.  
  169.  
  170. procedure initreserved();
  171.  
  172. {
  173.     This initializes the array of reserved words.  If you mess
  174. around with this, be advised that the symbol numbers defined in
  175. pasconst.i correspond with the indices of these words.  Look at
  176. searchreserved in utilities.p to explain the previous sentence.
  177. }
  178.  
  179. begin
  180.     reserved[1]  := "AND";
  181.     reserved[2]  := "ARRAY";
  182.     reserved[3]  := "BEGIN";
  183.     reserved[4]  := "BY";
  184.     reserved[5]  := "CASE";
  185.     reserved[6]  := "CONST";
  186.     reserved[7]  := "DIV";
  187.     reserved[8]  := "DO";
  188.     reserved[9]  := "DOWNTO";
  189.     reserved[10] := "ELSE";
  190.     reserved[11] := "END";
  191.     reserved[12] := "EXTERNAL";
  192.     reserved[13] := "FILE";
  193.     reserved[14] := "FOR";
  194.     reserved[15] := "FORWARD";
  195.     reserved[16] := "FUNCTION";
  196.     reserved[17] := "GOTO";
  197.     reserved[18] := "IF";
  198.     reserved[19] := "IN";
  199.     reserved[20] := "LABEL";
  200.     reserved[21] := "MOD";
  201.     reserved[22] := "NOT";
  202.     reserved[23] := "OF";
  203.     reserved[24] := "OR";
  204.     reserved[25] := "PACKED";
  205.     reserved[26] := "PRIVATE";
  206.     reserved[27] := "PROCEDURE";
  207.     reserved[28] := "PROGRAM";
  208.     reserved[29] := "RECORD";
  209.     reserved[30] := "REPEAT";
  210.     reserved[31] := "RETURN";
  211.     reserved[32] := "SET";
  212.     reserved[33] := "THEN";
  213.     reserved[34] := "TO";
  214.     reserved[35] := "TYPE";
  215.     reserved[36] := "UNTIL";
  216.     reserved[37] := "VAR";
  217.     reserved[38] := "WHILE";
  218.     reserved[39] := "WITH";
  219. end;
  220.  
  221. Procedure initglobals;
  222.  
  223. {
  224.     This just puts the startup values into the variables.
  225. }
  226.  
  227. begin
  228.     litlab := 1;
  229.  
  230.     symtext := allocstring(80);
  231.     includename := allocstring(80);
  232.  
  233.     eqstart := 0;
  234.     eqend := 0;
  235.     errorptr := 0;
  236.  
  237.     including := false;
  238.     identptr := 1;
  239.     spelling[0] := chr(0);
  240.     spellptr := 1;
  241.     litptr := 1;
  242.     errorcount := 0;
  243.     lineno := 1;
  244.     currsym := 0;
  245.     symloc := 0;
  246.     currfn := 0;
  247.     nxtlab := 1;
  248.     rangecheck := false;
  249. end;
  250.